# -*- coding: utf-8 -*-
"""以下是帧数相关配置"""
FPS					= 30			#客户端逻辑帧数
FPS_SERVER			= 5		#服务端逻辑帧数
FPS_RATE			= FPS / FPS_SERVER		#客户端服务端帧率比

"""以下是游戏模式相关配置"""
GAME_MODE_SINGLE		= 0x01		#单人模式

"""以下是玩家个人数据相关的配置"""
#存关卡完成情况的buff的key
BUFF_COMPLETE			= "buf0"
#所有用到的buff的列表
ALL_USED_BUFF			= (BUFF_COMPLETE, )
#存关卡完成信息的打包格式
BUFF_COMPLETE_FORMAT_1	= 0x01
#现在使用的打包格式的字典
BUFF_FORMAT_ACTIVE		= {
						BUFF_COMPLETE : BUFF_COMPLETE_FORMAT_1
							}
#存放各种不同打包格式的长度的字典
BUFF_FORMAT_LENGTH		= {
						BUFF_COMPLETE_FORMAT_1 : 51
							}
#存放各种不同打包格式的格式化字符的字典
BUFF_FORMAT_TYPE		= {
						BUFF_COMPLETE_FORMAT_1 : "=50B"
							}

"""以下是游戏状态标识的配置"""
GAME_WAIT			= 0x01			#准备状态
GAME_INIT			= 0x02			#游戏初始化状态（此时可以选择带入游戏的植物）
GAME_PLAYING		= 0x03			#游戏中状态

"""以下是倒数相关的配置"""
WAIT_COUNTDOWN		= 5				#游戏开始倒数时间
INIT_COUNTDOWN		= 20			#游戏准备（选择卡片带入游戏）倒数时间

"""以下是精灵状态标识的配置"""
STATUS_WAIT			= 0x00			#等待（AI做出下个动作的决定后直到服务端返回消息之前的状态）
STATUS_NEW			= 0x01			#刚刚创建
STATUS_BORN			= 0x02			#出生状态
STATUS_STAND		= 0x03			#原地不动
STATUS_ATTACK		= 0x04			#攻击状态
STATUS_MOVE			= 0x05			#移动
STATUS_DIE			= 0x06			#死亡状态
STATUS_SKILL		= 0x07			#使用技能
STATUS_FLY_OUT		= 0x08		#物品向屏幕外飞行中（阳光被拾取后）
STATUS_GROW			= 0x09			#成长状态（土豆地雷）
STATUS_DIGEST		= 0x0A			#消化状态（食尸花）
STATUS_SWALLOW		= 0x0B		#吞咽状态（食尸花）
STATUS_JUMP_UP		= 0x0C		#跳跃上升阶段（撑杆跳僵尸）
STATUS_JUMP_DOWN	= 0x0D		#跳跃下降阶段（撑杆跳僵尸）
STATUS_JUMP_FAIL	= 0x0E		#跳跃失败滑下来的阶段（撑杆跳僵尸）

"""以下是增益状态和减益状态的配置"""
DEBUFF_COOL			= 0x01				#寒冷状态（移动速度减慢）
DEBUFF_EXPLODE		= 0x02			#被炸（如果在此状态下死亡，则化为灰烬）
DEBUFF_DISAPPEAR	= 0x03			#消失（如果在此状态下死亡，则直接消失，不播放死亡动画）
#各种增益/减益状态的持续时间（单位秒）
BUFF_TIME			= {DEBUFF_COOL : 10, \
						}

"""以下是生命和护甲状态的配置（某些植物或者僵尸会根据生命值来切换模型状态）"""
LIFE_STATE_FULL		= 0x01			#生命2/3以上
LIFE_STATE_HURT		= 0x02			#生命2/3到1/3
LIFE_STATE_WEAK		= 0x03			#生命1/3以下
ARMOR_STATE_FULL	= 0x04			#护甲2/3以上
ARMOR_STATE_HURT	= 0x05			#护甲2/3到1/3
ARMOR_STATE_WEAK	= 0x06			#护甲1/3以下
ARMOE_STATE_NONE	= 0x07			#护甲为0

"""以下是僵尸移动函数的返回值"""
RESULT_CAN_MOVE		= 0x01			#可以正常移动
RESULT_ENEMY_STOP	= 0x02			#遇到敌对可以攻击的敌对物体

"""以下是子弹攻击目标类型配置"""
TARGET_SPRITE		= 0x01			#精灵
TARGET_AREA			= 0x02			#位置

"""以下是精灵移动方向的配置"""
DIR_TO_HOME			= (-1, 0)
DIR_TO_ZOMBIE		= (1, 0)

"""以下是一些游戏细节内容相关的配置信息"""
##可种植植物卡片槽上最多有多少个可用的显示控件
MAX_SELECT_CARD_VIEW	= 6
##可选择植物卡片箱子里最多有多少个可用的显示控件
MAX_TOTAL_CARD_VIEW	= 14
##时间槽上最大显示多少波旗子
MAX_FLAG_VIEW		= 4
##地图上横向最大的格子数
MAP_GRID_WIDTH		= 9
##地图上每个格子的大小
GRID_PIXEL_WIDTH	= 79
GRID_PIXEL_HEIGHT	= 105
##默认的精灵模型缩放比例
GRID_SPRITE_SCALE	= 1.0
#阳光上限
MAX_ENERGY_STORE		= 99999

"""以下是游戏区域物件遮挡层次关系相关参数"""
MAX_LAYER_NUM		= 3				#游戏区域总共分为多少层
BG_LAYER			= 0					#背景层
SPRITE_LAYER		= 1				#精灵层
ITEM_LAYER			= 2				#物品层

GRID_RLEVEL_OFFSET	= 5		#单个逻辑格rlevel分多少层
BACK_RLEVEL			= 1				#南瓜后半
PLANT_RLEVEL		= 2				#植物层
FRONT_RLEVEL		= 3				#南瓜前半
ZOMBIE_RLEVEL		= 4				#怪物层
MISSILE_RLEVEL	= 5				#子弹层

#每个逻辑行占用的rlevel数
ROW_RLEVEL_OFFSET	= (GRID_RLEVEL_OFFSET + 1) * MAP_GRID_WIDTH

"""以下是阵营配置"""
FACTION_PLANT			= 0x01			#植物
FACTION_ZOMBIE		= 0x02			#僵尸
FACTION_NONE			= 0x03			#中立方（平局时候用）

"""以下是和索敌相关的配置"""
#面向的配置
FACE_TO_LEFT		= -1			#面向左边
FACE_TO_RIGHT		= 1				#面向右边

##索敌类型配置（面向为前方）
SEEK_FORWARD_LINE	= 0x01				#当前行自己前方的全部敌人
SEEK_BACKWARD_LINE	= 0x02			#当前行自己后方的全部敌人
SEEK_ALL_LINE		= 0x03					#当前行全部的敌人
SEEK_DISTANCE		= 0x04					#自己前后多少范围内的敌人
SEEK_TRIP_FORWARD	= 0x05				#当前行和上下各一行且在自己前方的全部敌人

"""以下是子弹攻击类型配置"""
ATTACK_SINGLE		= 0x01			#只命中一个敌人
ATTACK_ALL			= 0x02			#命中全部敌人
ATTACK_SPURT		= 0x03			#溅射

"""以下是地图上地形的配置"""
TBASE_GRASS			= 0x01			#草地
TBASE_WATER			= 0x02			#水面
TBASE_ROOF			= 0x03			#屋顶
TBASE_OTHER_TOWER	= 0x04		#其他植物

"""以下是游戏区域精灵类型的配置"""
OBJECT_TOWER		= 0x01			#炮台（植物）
OBJECT_MONSTER	= 0x02			#怪物（僵尸）
OBJECT_MISSILE	= 0x03			#子弹（飞射物）
OBJECT_ITEM			= 0x04			#奖励物品（阳光）
OBJECT_BASIS		= 0x05			#基座（主要是僵尸的攻击可以认为是针对基座的）
OBJECT_EFFECT		= 0x06			#特效（一般是某个动画文件）

"""以下是地图区域精灵的id上下边界配置"""
ID_MAX_GENERATE		= 10000		#获取可用id的时候最多只会尝试获取多少次，多余这个次数会认为本次获取失败
ID_START_SERVER		= 255			#前255个id留给地图区域的炮台底座
ID_END_SERVER			= 10000000
ID_START_CLIENT		= 10000001
ID_END_CLIENT			= 20000000

"""以下是地图区域精灵种类的配置"""
#删除植物的操作（注意不能和精灵定义重复）
JOB_DELETE_PLANT		= -1
##地图上各类精灵的定义
JOB_TOWER_SUNFLOWER		= 0x01			#向日葵
JOB_TOWER_PEA			= 0x02			#豌豆射手
JOB_TOWER_LILY			= 0x03			#睡莲
JOB_TOWER_POT			= 0x04			#花盆
JOB_TOWER_PUMPKIN		= 0x05			#南瓜
JOB_TOWER_REPEATER		= 0x06			#双发豌豆射手
JOB_TOWER_THREEPEATER	= 0x07			#散弹豌豆射手
JOB_TOWER_GATLINGPEA	= 0x08			#四联发豌豆射手
JOB_TOWER_SPLITPEA		= 0x09			#双向豌豆射手
JOB_TOWER_WALLNUT		= 0x0A			#小坚果
JOB_TOWER_TALLNUT		= 0x0B			#大坚果
JOB_TOWER_SNOWPEA		= 0x0C			#冰冻射手
JOB_TOWER_CHERRYBOMB	= 0x0D			#草莓炸弹
JOB_TOWER_CHOMPER		= 0x0E			#食尸花
JOB_TOWER_POTATOMINE	= 0x0F			#土豆地雷

JOB_MONSTER_NAKED		= 0x60			#普通僵尸
JOB_MONSTER_FLAG		= 0x61			#旗子僵尸
JOB_MONSTER_CONEHEAD	= 0x62			#路障僵尸
JOB_MONSTER_BUCKETHEAD	= 0x63			#铁桶僵尸
JOB_MONSTER_SCREENDOOR	= 0x64			#门板僵尸
JOB_MONSTER_POLEVAULT	= 0x65			#跳高僵尸

JOB_MISSILE_PEA			= 0xA0			#豌豆子弹
JOB_MISSILE_SNOWPEA		= 0xA1			#冰冻子弹

JOB_ITEM_SUN			= 0xE0			#阳光
JOB_ITEM_SILVER			= 0xE1			#银币

#所有可选的植物的列表（目前个人信息中没有对可以用哪些植物卡片进行保存，默认所有玩家都可以选择所有可用植物）
ALL_CHOOSE_ABLE_PLANT	= (JOB_TOWER_SUNFLOWER, JOB_TOWER_PEA, JOB_TOWER_REPEATER, \
							JOB_TOWER_WALLNUT, JOB_TOWER_SNOWPEA, \
							JOB_TOWER_CHERRYBOMB, JOB_TOWER_CHOMPER, JOB_TOWER_POTATOMINE, \
							)

##地图上植物种植需要的地形配置
BUILD_LAND_DIC			= {
		JOB_TOWER_SUNFLOWER : TBASE_GRASS, \
		JOB_TOWER_PEA : TBASE_GRASS, \
		JOB_TOWER_LILY : TBASE_WATER, \
		JOB_TOWER_POT : TBASE_ROOF, \
		JOB_TOWER_PUMPKIN : TBASE_GRASS, \
		JOB_TOWER_REPEATER : TBASE_GRASS, \
		JOB_TOWER_WALLNUT : TBASE_GRASS, \
		JOB_TOWER_TALLNUT : TBASE_GRASS, \
		JOB_TOWER_SNOWPEA : TBASE_GRASS, \
		JOB_TOWER_CHERRYBOMB : TBASE_GRASS, \
		JOB_TOWER_POTATOMINE : TBASE_GRASS, \
		JOB_TOWER_CHOMPER : TBASE_GRASS, \
}
##地图上强化植物需要的原始植物类型
BUILD_PANLT_DIC			= {
}
##地图上僵尸能够出现的地形
MONSTER_APPEAR_DIC		= {
		JOB_MONSTER_NAKED : (TBASE_GRASS, TBASE_ROOF), \
		JOB_MONSTER_FLAG : (TBASE_GRASS, TBASE_ROOF), \
		JOB_MONSTER_CONEHEAD : (TBASE_GRASS, TBASE_ROOF), \
		JOB_MONSTER_BUCKETHEAD : (TBASE_GRASS, TBASE_ROOF), \
		JOB_MONSTER_POLEVAULT : (TBASE_GRASS, TBASE_ROOF), \
}

##植物和僵尸技能的配置
SKILL_CREATE_SUN		= 0x01			#制造阳光
SKILL_EXPLODE			= 0x02			#爆炸
SKILL_EAT				= 0x03			#吞吃
SKILL_JUMP				= 0x04			#跳跃

##植物死亡方式的配置（成就统计用）
DIE_STYLE_HURT			= 0x01			#被僵尸杀掉的
DIE_STYLE_DELETE		= 0x02			#玩家自己铲掉的
DIE_STYLE_SUICIDE		= 0x03			#自杀（炸弹类的死法）

"""以下是日志相关配置"""
LOGTYPE_DEEP				= 0x01			#底层调试用日志（日志等级deep）
LOGTYPE_DEBUG				= 0x02			#dubug日志（日志等级debug）
LOGTYPE_KEYPOINT		= 0x03			#游戏逻辑关键时间点或关键事件的日志，如玩家登陆等（日志等级info）
LOGTYPE_KEYDATA			= 0x04			#游戏关键数据日志，玩家的可积累数据、物品、付费道具等（日志等级info）
LOGTYPE_DESIGN			= 0x05			#某些数据超出了游戏设计的边界，如动态id溢出（日志等级warn）
LOGTYPE_CONFIG			= 0x06			#某些配置在实际运行中不可用或溢出
LOGTYPE_ERROR				= 0x07			#意外错误，一般是因为程序逻辑存在漏洞或者被破解的客户端胡乱发包引起
##日志关键字，用以扫描日志的时候区分不同日志类型
LOG_KEYWORD_DIC			= {
		LOGTYPE_DEEP : '', \
		LOGTYPE_DEBUG : '', \
		LOGTYPE_KEYPOINT : '[KP]', \
		LOGTYPE_KEYDATA : '[KD]', \
		LOGTYPE_DESIGN : '[DESIGN]', \
		LOGTYPE_CONFIG : '[CONF]', \
		LOGTYPE_ERROR : '[ERROR]'
		}
